home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / other / dopus412-gpl / library / requesters.h < prev    next >
C/C++ Source or Header  |  2000-02-28  |  8KB  |  221 lines

  1. /*
  2.  
  3. Directory Opus 4
  4. Original GPL release version 4.12
  5. Copyright 1993-2000 Jonathan Potter
  6.  
  7. This program is free software; you can redistribute it and/or
  8. modify it under the terms of the GNU General Public License
  9. as published by the Free Software Foundation; either version 2
  10. of the License, or (at your option) any later version.
  11.  
  12. This program is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with this program; if not, write to the Free Software
  19. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20.  
  21. All users of Directory Opus 4 (including versions distributed
  22. under the GPL) are entitled to upgrade to the latest version of
  23. Directory Opus version 5 at a reduced price. Please see
  24. http://www.gpsoft.com.au for more information.
  25.  
  26. The release of Directory Opus 4 under the GPL in NO WAY affects
  27. the existing commercial status of Directory Opus 5.
  28.  
  29. */
  30.  
  31. /* Structures and Tags for font-sensitive layout routines */
  32.  
  33. /* A requester object; normally text, a gadget, a border or a listview */
  34.  
  35. struct RequesterObject {
  36.     struct RequesterObject *ro_next;     /* Next object */
  37.     ULONG ro_type;                       /* Object type */
  38.     APTR ro_data;                        /* Object data */
  39. };
  40.  
  41. /* The main definition structure of a requester */
  42.  
  43. struct RequesterBase {
  44.     short rb_width,rb_height;            /* Width, Height in characters    */
  45.     short rb_widthfine,rb_heightfine;    /* Width, Height fine positioning */
  46.  
  47.     short rb_leftoffset,rb_topoffset;    /* Left, Top object offsets       */
  48.  
  49.     char rb_fg,rb_bg;                    /* Foreground, Background pens    */
  50.     char rb_shine,rb_shadow;             /* Shine, Shadow pens             */
  51.     struct TextFont *rb_font;            /* Requester font                 */
  52.     char *rb_screenname;                 /* Screen name to open on         */
  53.     struct Screen *rb_screen;            /* Screen pointer to open on      */
  54.     char *rb_title;                      /* Window title (RBF_BORDERS)     */
  55.  
  56.     struct DOpusRemember *rb_memory;     /* Memory key                     */
  57.     struct RequesterObject *rb_objects;  /* Requester objects              */
  58.     struct Window *rb_window;            /* Window pointer                 */
  59.  
  60.     ULONG rb_flags;                      /* Requester flags                */
  61.     ULONG rb_privateflags;               /* Private requester flags        */
  62.     struct StringExtend *rb_extend;      /* String Extension if needed     */
  63.     ULONG rb_idcmpflags;                 /* IDCMP flags or 0 for standard  */
  64.  
  65.     APTR rb_privatedata;                 /* Private requester data         */
  66.     char **rb_string_table;              /* String table (RBF_STRINGS)     */
  67. };
  68.  
  69. /* rb_flags */
  70.  
  71. #define RBF_BORDERS         1          /* Standard Intuition borders     */
  72. #define RBF_CLOSEGAD        2          /* Close gadget with borders      */
  73. #define RBF_STRINGS         4          /* Custom string table supplied   */
  74. #define RBF_WINDOWCENTER    8          /* Center within provided window  */
  75.  
  76. /* rb_privateflags */
  77.  
  78. #define RBP_CLOSEFONT       1          /* rb_font must be closed         */
  79.  
  80.  
  81. /* Requester Text object */
  82.  
  83. typedef struct RequesterObject_Text {
  84.     short ot_left,ot_top;                /* Left edge, Top edge */
  85.     char *ot_text;                       /* Text string */
  86. } Object_Text;
  87.  
  88.  
  89. /* Requester Border object */
  90.  
  91. typedef struct RequesterObject_Border {
  92.     short ob_left,ob_top;                /* Left edge, Top edge */
  93.     short ob_width,ob_height;            /* Width, Height */
  94.     short ob_type;                       /* Border type */
  95.     short ob_textpos;                    /* Text positioning */
  96.     char *ob_text;                       /* Text string */
  97. } Object_Border;
  98.  
  99.  
  100. /* Requester Gadget object */
  101.  
  102. typedef struct RequesterObject_Gadget {
  103.     struct Gadget og_gadget;             /* Gadget structure */
  104.     short og_textpos;                    /* Text positioning */
  105.     char *og_text;                       /* Text string */
  106.     char og_type;                        /* Private type identifier */
  107. } Object_Gadget;
  108.  
  109.  
  110. /* Requester ListView object */
  111.  
  112. typedef struct RequesterObject_ListView {
  113.     struct DOpusListView ol_listview;    /* List view structure */
  114. } Object_ListView;
  115.  
  116.  
  117. /* Object Tag definitions */
  118.  
  119. #define RO_Dummy      (TAG_USER + 99)
  120.  
  121. #define RO_Type       (RO_Dummy + 0x01)    /* Object type */
  122.  
  123. #define RO_Left       (RO_Dummy + 0x02)    /* Left edge in characters */
  124. #define RO_Top        (RO_Dummy + 0x03)    /* Top edge in characters */
  125. #define RO_LeftFine   (RO_Dummy + 0x04)    /* Left edge fine positioning */
  126. #define RO_TopFine    (RO_Dummy + 0x05)    /* Top edge fine positioning */
  127.  
  128. #define RO_Width      (RO_Dummy + 0x06)    /* Width in characters */
  129. #define RO_Height     (RO_Dummy + 0x07)    /* Height in characters */
  130. #define RO_WidthFine  (RO_Dummy + 0x08)    /* Width fine adjustment */
  131. #define RO_HeightFine (RO_Dummy + 0x09)    /* Height fine adjustment */
  132.  
  133. #define RO_Text       (RO_Dummy + 0x0a)    /* Object text */
  134. #define RO_TextPos    (RO_Dummy + 0x0b)    /* Text positioning */
  135.  
  136. #define RO_GadgetID   (RO_Dummy + 0x0c)    /* Gadget ID */
  137. #define RO_GadgetType (RO_Dummy + 0x0d)    /* Gadget type */
  138.  
  139. #define RO_BorderType (RO_Dummy + 0x0e)    /* Border type */
  140.  
  141. #define RO_ListViewID (RO_Dummy + 0x0f)    /* ListView ID */
  142.  
  143. #define RO_StringBuf  (RO_Dummy + 0x10)    /* String gadget buffer */
  144. #define RO_StringLen  (RO_Dummy + 0x11)    /* Size of string gadget buffer */
  145. #define RO_StringUndo (RO_Dummy + 0x12)    /* String undo buffer */
  146.  
  147. #define RO_BoolOn     (RO_Dummy + 0x13)    /* Boolean gadget is on by default */
  148.  
  149. #define RO_ChkCenter  (RO_Dummy + 0x14)    /* Check gadgets are font-centered */
  150.  
  151. #define RO_TextNum    (RO_Dummy + 0x15)    /* Use string from string-table */
  152.  
  153. #define RO_HighRecess (RO_Dummy + 0x16)    /* Highlight by recessing borders */
  154.  
  155.  
  156. /* RO_ObjectType */
  157.  
  158. #define OBJECT_TEXT      1 /* Text object */
  159. #define OBJECT_BORDER    2 /* Border object */
  160. #define OBJECT_GADGET    3 /* Gadget object */
  161. #define OBJECT_LISTVIEW  4 /* ListView object */
  162.  
  163.  
  164. /* RO_TextPos */
  165.  
  166. #define TEXTPOS_ABSOLUTE 1 /* Absolute coordinates */
  167. #define TEXTPOS_CENTER   2 /* Center within object */
  168. #define TEXTPOS_LEFT     3 /* Position to left of object */
  169. #define TEXTPOS_RIGHT    4 /* Position to right of object */
  170. #define TEXTPOS_ABOVE    5 /* Position above object */
  171. #define TEXTPOS_BELOW    6 /* Position below object */
  172.  
  173. #define TEXTPOS_F_NOUSCORE 32768  /* Do not render underscores */
  174.  
  175. /* RO_BorderType */
  176.  
  177. #define BORDER_NONE      0 /* No border */
  178. #define BORDER_NORMAL    1 /* Normal border */
  179. #define BORDER_RECESSED  2 /* Recessed border */
  180. #define BORDER_GROUP     3 /* Group border */
  181. #define BORDER_STRING    4 /* String border */
  182.  
  183.  
  184. /* RO_GadgetType */
  185.  
  186. #define GADGET_BOOLEAN   0 /* Boolean gadget */
  187. #define GADGET_STRING    1 /* String gadget */
  188. #define GADGET_PROP      2 /* Proportional gadget */
  189. #define GADGET_CHECK     3 /* Check-mark gadget */
  190. #define GADGET_CYCLE     4 /* Cycle gadget */
  191. #define GADGET_RADIO     5 /* Radio button */
  192. #define GADGET_GLASS     6 /* Magnifying-glass gadget */
  193. #define GADGET_INTEGER   7 /* Integer string gadget */
  194. #define GADGET_TINYGLASS 8 /* Smaller, centered glass gadget */
  195.  
  196. /* Requester opening routine */
  197.  
  198. struct Window *OpenRequester(struct RequesterBase *Requester);
  199.  
  200. /* Requester closing routine */
  201.  
  202. void CloseRequester(struct RequesterBase *Requester);
  203.  
  204. /* Object adding routine */
  205.  
  206. APTR AddRequesterObject(struct RequesterBase *Requester,
  207.     struct TagItem *ObjectTags);
  208.  
  209. /* Requester refreshing routine */
  210.  
  211. void RefreshRequesterObject(struct RequesterBase *Requester,
  212.     struct RequesterObject *FirstObject);
  213.  
  214. /* Routine to render text within an area */
  215.  
  216. void ObjectText(struct RequesterBase *Requester,
  217.     short Left,short Top,
  218.     short Width,short Height,
  219.     char *Text,
  220.     unsigned short TextPos);
  221.